home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / c / stut_src / desktopi.c < prev    next >
C/C++ Source or Header  |  1996-05-27  |  20KB  |  732 lines

  1. /*
  2.  * desktopi.c
  3.  *
  4.  * Purpose:
  5.  * --------
  6.  *    Installation du nouveau bureau
  7.  *    Init des ic“nes
  8.  *
  9.  * History:
  10.  * --------
  11.  * 1992: fplanque: Created
  12.  * 09.05.94: fplanque: les fichiers .h pour ressources avaient disparu
  13.  *                    lors de l'ajout de commentaires - remis en place.
  14.  * 15.07.94: sorti fonction create_EmptyDataDir();
  15.  */
  16.  
  17.  
  18.      #include "!OPTIONS.H"                /* Options de compilation */         
  19.     #define    THIS_FILE    "DESKTOPI.C v1.00 - 02.95"
  20.           
  21.  
  22. /*
  23.  * System headers:
  24.  */
  25.     #include    <stdio.h>                /* header standard */
  26.     #include <string.h>                /* strcopy */
  27.     #include    <aes.h>                    /* Pour routines AES */
  28.  
  29. /*
  30.  * Custom headers:
  31.  */
  32.     #include "SPEC_PU.H"
  33.     #include "S_MALLOC.H"
  34.     #include "DEBUG_PU.H"
  35.     #include "WIN_PU.H"
  36.     #include "DESK_PU.H"
  37.     #include "COLORDEF.H"            /* Couleurs … utiliser */
  38.     #include "AESDEF.H"                /* Gestion AES etendue */
  39.     #include "VDI_PU.H"
  40.  
  41.     #include "DESKICON.RCH"                    /* Bureau + Icones haute r‚solution */
  42. #if ACCEPT_SMALLFONTS == YES1
  43.     #include "DESK_MED.RCH"                    /* Ic“nes moyenne r‚solution */
  44. #endif
  45.  
  46.     #include "RSH_MAP.H"    
  47.     #include    "RSHCRMAP.H"            /* Cr‚ation du map pour CE RSH */
  48.  
  49.  
  50. /*
  51.  * ------------------------ PROTOTYPES -------------------------
  52.  */
  53.  
  54. /*
  55.  * EXTernal prototypes:
  56.  */
  57.     /* 
  58.      * G‚n‚ral: 
  59.      */
  60.     extern    void    erreur( const char *texte_erreur );
  61.     extern    void    erreur_rsrc( void );        /* PROVISOIRE */
  62.     extern    void    ping( void );
  63.     /* 
  64.      * Relocation du RSH: 
  65.      */
  66.     extern    void    remap_rsh( RSH_MAP *rsh_map );
  67.     /* 
  68.      * Fenetres: 
  69.      */
  70.     extern    void    redraw( WIPARAMS *wi_params_adr, int area_x, int area_y, int area_w, int area_h, int take_control );
  71.     /*
  72.      * datadirs
  73.      */
  74.     extern    DATADIR    *create_EmptyDataDir(                    /* Out: Ptr sur directory cr‚‚ */
  75.                                 DATAGROUP    *    pDataGroup,            /* In:  Groupe dans lequel on cr‚e ce dossier */
  76.                                 DATADIR        *    pDataDir_parent );/* In:  Directory parent de celui-ci */
  77.     /*
  78.      * datas:
  79.      */
  80.     extern    void    init_vars_datagroup( 
  81.                             DATAGROUP *datagroup );    /* In: DATAGROUP à initialiser */
  82.  
  83.  
  84. /*
  85.  * PUBlic INTernal prototypes:
  86.  */
  87.     static    DATAGROUP    *    find_datagroup_byType(         /* Out: Ptr sur datagroup */
  88.                                         DATATYPE        DataType );    /* In:  Type DTYP_* */
  89.  
  90. /*
  91.  * PRIVate INTernal prototypes:
  92.  */
  93.     static    void        place_fnct_icon( OBJECT *icone );
  94.     static    void        place_data_icon( OBJECT *icone );
  95.     static    void        register_datagroup( int    icon_no, DATAGROUP *datagroup_ptr );
  96.  
  97.    
  98. /*
  99.  * ------------------------ VARIABLES -------------------------
  100.  */
  101.  
  102. /*
  103.  * External variables: 
  104.  */
  105.     extern    unsigned    G_version_aes;                /* Version AES */
  106.     extern    int        G_x_mini, G_y_mini;        /* Coord sup gauche de l'‚cran */
  107.     extern    int        G_w_maxi, G_h_maxi;        /* Taille de l'‚cran de travail */
  108.     extern    int        G_wx_mini, G_wy_mini;    /* Dimensions maximales d'une */
  109.     extern    int        G_ww_maxi, G_wh_maxi;    /* fenˆtre complŠte */
  110.     extern    int        G_nb_colors;                /* Nbre de couleurs simultan‚es */
  111.  
  112.  
  113. /*
  114.  * Public variables: 
  115.  */
  116.     OBJECT    *    G_desktop_adr;                /* Ptr sur arbre bureau */
  117.     WIPARAMS    *    G_desk_params_adr;        /* ParamŠtres de la "fenˆtre bureau" */
  118.     ICONIMGS        G_icon_images;                /* Pointeurs sur les images des ic“nes */
  119.     int            G_icon_w, G_icon_h;        /* Dimensions des ic“nes */
  120.     int            G_iconw_max_w;                /* Dimension maximale d'une fenˆtre contenant des ic“nes */
  121.     int            G_fantome_icone[18];        /* Tableau contenant les coord pour le dessin d'un fant“me d'ic“ne */
  122.     DATAGROUP *    G_datagroups;                /* Pointeur sur tableau de G_datagroups */
  123.     
  124. /*
  125.  * Private variables: 
  126.  */
  127.     static    int    M_fnct_icons_height=1;        /* Hauteur de l'empilement des ic“nes de fonction */
  128.     static    int    M_fnct_icons_max;                /* Hauteur maxi: */
  129.     static    int    M_fnct_icons_border;            /* Ligne d'alignement */
  130.     static    int    M_data_icons_width;            /* Largeur de l'empilement des ic“nes de donn‚es */
  131.     static    int    M_data_icons_max;                /* Largeur maxi: */
  132.     static    int    M_data_icons_border;            /* Ligne d'alignement */
  133.     static    int    M_icon_fcolor = ICON_PAPER_2 << 8;    /* Couleur de fond pour les icones, par d‚faut: blanc */
  134.     static    int    M_nb_datagroups=0;            /* Nombre de groupes de donn‚es enregistr‚s */
  135.      
  136.  
  137. /*
  138.  * ------------------------ FUNCTIONS -------------------------
  139.  */
  140.  
  141. /*
  142.  * init_desktop(-)
  143.  *
  144.  * Purpose:
  145.  * --------
  146.  * Ajuste l'arbre d'objets du bureau à la zone de travail de l'écran
  147.  * courament utilisé
  148.  *
  149.  * History:
  150.  * --------
  151.  * 1993: fplanque: Created
  152.  * 02.02.95: gŠre moyenne r‚solution
  153.  */
  154. void    init_desktop( void )
  155. {
  156.     int    foo;
  157.  
  158.     TRACE0( "Initializing " THIS_FILE );
  159.  
  160.     /*
  161.      * Si moyenne r‚solution, utilise le jeu d'ic“ne appropri‚:
  162.      */
  163.     #if ACCEPT_SMALLFONTS
  164.         if( G_cell_size_prop == 1 )
  165.         {
  166.             rsh_map .rs_iconblk = rs_iconblk_med;
  167.         }
  168.     #endif
  169.  
  170.     /*
  171.      * Relocation du RSH: 
  172.      */
  173.     remap_rsh( &rsh_map );        /* Reloge le RSH */
  174.  
  175.     /*
  176.      * Adresse des arbres: 
  177.      */
  178.     G_desktop_adr = &rs_object[ rs_trindex[ DESKTOP ] ];
  179.  
  180.     /*
  181.      * Modifie taille LOGO si n‚cessaire:
  182.      */
  183. #if ACCEPT_SMALLFONTS
  184.     if( G_cell_size_prop == 1 )
  185.     {    /*
  186.          * Moyenne r‚solution
  187.          */
  188.         int        nb_lines = rs_bitblk[ 0 ] .bi_hl;
  189.         int        n_linesize = rs_bitblk[ 0 ] .bi_wb;    /* Taille en bytes */
  190.         int        n_SrceLine = 2;
  191.         char    *    pBitmap_Srce = &((char*) (rs_bitblk[ 0 ] .bi_pdata))[ 2 * n_linesize ];
  192.         char    *    pBitmap_Dest = &((char*) (rs_bitblk[ 0 ] .bi_pdata))[ n_linesize ];
  193.         int        nb_CreatedLines = 1;    /* La premiŠre ligne reste intacte et existe d‚j… */
  194.         
  195.         while( n_SrceLine <= nb_lines )
  196.         {
  197.             memcpy( pBitmap_Dest, pBitmap_Srce, n_linesize );
  198.             
  199.             /*
  200.              * On a cr‚‚ une ligne de plus:
  201.              */
  202.             nb_CreatedLines++;
  203.  
  204.             n_SrceLine++;
  205.             n_SrceLine++;
  206.             pBitmap_Srce += n_linesize;
  207.             pBitmap_Srce += n_linesize;
  208.             pBitmap_Dest += n_linesize;
  209.  
  210.         }
  211.  
  212.         /*
  213.          * Nouvelle taille (/2):
  214.          * Aussi bien pour l'ombre que pour le logo:
  215.          */
  216.         rs_bitblk[ 0 ] .bi_hl = nb_CreatedLines;
  217.         rs_bitblk[ 1 ] .bi_hl = nb_CreatedLines;
  218.         /*
  219.          *  Remonte l'ombre plus prŠs du logo:
  220.          */
  221.         G_desktop_adr[ LOGSHAPE ] .ob_y = 11;
  222.         G_desktop_adr[ LOGSHADE ] .ob_y = 12;
  223.     }
  224. #endif
  225.     
  226.     /*
  227.      * Regarde taille des ic“nes Desktop: 
  228.      */
  229.     G_icon_w =    G_desktop_adr[ DSTDISK ] .ob_width;
  230.     G_icon_h =    G_desktop_adr[ DSTDISK ] .ob_height;
  231.     /* TRACE2( "Icon w=%d h=%d", G_icon_w, G_icon_h ); */
  232.     
  233.     /*
  234.      * Position X maximale que peuvent occuper les ic“nes ds une fenˆtre 
  235.      */
  236.     G_iconw_max_w= G_ww_maxi - G_ww_maxi % G_icon_w;        /* Largeur max de la zone d'ic“nes */
  237.     wind_calc( WC_BORDER, COMPLETE, 100, 100, G_iconw_max_w, 100,
  238.                         &foo, &foo, &G_iconw_max_w, &foo ); /* Larg max de la fenˆtre */
  239.  
  240.     
  241.     /*
  242.      * Cr‚ation des infos sur la "fenˆtre bureau" 
  243.      */
  244.     G_desk_params_adr= (WIPARAMS *)MALLOC( sizeof(WIPARAMS) ) ;
  245.     G_desk_params_adr -> handle                = 0;
  246.     G_desk_params_adr -> class                    = CLASS_DESK;
  247.     G_desk_params_adr -> type                    = TYP_DESK;
  248.     G_desk_params_adr -> draw_ptr .tree    = G_desktop_adr;
  249.     G_desk_params_adr -> seen_x                = G_x_mini;
  250.     G_desk_params_adr -> seen_y                = G_y_mini;
  251.     G_desk_params_adr -> seen_w                = G_w_maxi;
  252.     G_desk_params_adr -> seen_h                = G_h_maxi;
  253.     G_desk_params_adr -> total_w                = G_w_maxi;
  254.     G_desk_params_adr -> total_h                = G_h_maxi;
  255.     G_desk_params_adr -> selected_icon        = 0;    /* Pas d'ic“ne s‚lectionn‚e */
  256.  
  257.     /*
  258.      * Ordonnancement du bureau 
  259.      * Fixe dimensions du bureau: 
  260.      */
  261.     G_desktop_adr[0] .ob_x            = G_x_mini;
  262.     G_desktop_adr[0] .ob_y            = G_y_mini;
  263.     G_desktop_adr[0] .ob_width        = G_w_maxi;
  264.     G_desktop_adr[0] .ob_height    = G_h_maxi;
  265.  
  266.     /*
  267.      * Place image centrale 
  268.      */
  269.     G_desktop_adr[ LOGOBOX ] .ob_x =
  270.         ( G_w_maxi - G_desktop_adr[ LOGOBOX ] .ob_width ) / 2;
  271.     G_desktop_adr[ LOGOBOX ] .ob_y =
  272.         ( G_h_maxi - G_icon_h - G_desktop_adr[ LOGOBOX ] .ob_height ) / 2;
  273.  
  274.     /*
  275.      * Fixe les couleurs (logiques): 
  276.      */
  277.     if( G_nb_colors >= 4 )
  278.     {    /*
  279.          * A partir de 4 couleurs: 
  280.          * Fond du bureau: 
  281.          */
  282.         G_desktop_adr[ ROOT ] .ob_spec.obspec.fillpattern = DESK_PATTERN_4;
  283.         G_desktop_adr[ ROOT ] .ob_spec.obspec.interiorcol = DESK_COLOR_4;
  284.         /*
  285.          * Logo Stut One: 
  286.          */
  287.         G_desktop_adr[ LOGSHAPE ] .ob_spec.bitblk -> bi_color = LOGO_COLOR_4;        /* Rouge */
  288.  
  289.         if ( G_nb_colors >= 16 )
  290.         {    /*
  291.              * A partir de 16 couleurs: 
  292.              */
  293.             TE_COLOR    te_color;
  294.             te_color.value = 0;
  295.             /*
  296.              * No de version 
  297.              */
  298.             te_color.bf .textcol = VERSION_COLOR_16;
  299.             G_desktop_adr[ VERTEXT ]  .ob_spec.tedinfo -> te_color = te_color.value;        /* Bleu */
  300.             /*
  301.              * Couleur de fond des icones: 
  302.              */
  303.             M_icon_fcolor = ICON_PAPER_16 << 8;
  304.         }
  305.     }
  306.  
  307.     /*
  308.      * PLace corbeille: (et en d‚duit les pos max pour les autres ic“nes) 
  309.      */
  310.     G_desktop_adr[ DSTTRASH ] .ob_x= G_w_maxi - G_icon_w;
  311.     M_data_icons_max = G_w_maxi - G_icon_w;    /* Les ic“nes de donn‚es ne pourront aller plus … droite que la corbeille! */
  312.     M_data_icons_border = G_h_maxi - G_icon_h;
  313.     
  314.     G_desktop_adr[ DSTTRASH ] .ob_y= G_h_maxi - G_icon_h;
  315.     M_fnct_icons_max = G_h_maxi - G_icon_h;
  316.         /* Les ic“nes de fonction ne pourront aller plus bas
  317.             que la corbeille! */
  318.     M_fnct_icons_border = G_w_maxi - G_icon_w;
  319.  
  320.     /*
  321.      * Couleur corbeille: 
  322.      */
  323.     if ( G_nb_colors >= 16 )
  324.     {    /* A partir de 16 couleurs: */
  325.         G_desktop_adr[ DSTTRASH ] .ob_spec.iconblk -> ib_char |= M_icon_fcolor ;
  326.     }
  327.         
  328.     /*
  329.      * Place ic“nes de fonction: 
  330.      */
  331.     place_fnct_icon( &G_desktop_adr[ DSTDISK ] );
  332.     place_fnct_icon( &G_desktop_adr[ DSTTERM ] );
  333.  
  334.     /*
  335.      * Place ic“nes de donn‚es: 
  336.      */
  337.     place_data_icon( &G_desktop_adr[ DSTARBO ] );
  338.     place_data_icon( &G_desktop_adr[ DSTPAGES ] );
  339.     place_data_icon( &G_desktop_adr[ DSTDATAS ] );
  340.     place_data_icon( &G_desktop_adr[ DSTTEXTS ] );
  341.     place_data_icon( &G_desktop_adr[ DSTPICS ] );
  342.  
  343.     /*
  344.      * Installation du fond de bureau 
  345.      */
  346.     wind_set( 0, WF_NEWDESK, G_desktop_adr, ROOT );
  347.     /*
  348.      * Affichage du nouveau bureau: 
  349.      */
  350.     redraw( G_desk_params_adr, G_x_mini, G_y_mini, G_w_maxi, G_h_maxi, TAKE_CTRL );
  351.  
  352. }
  353.  
  354.  
  355. /*
  356.  * clear_desktop(-)
  357.  *
  358.  * Purpose:
  359.  * --------
  360.  * EnlŠve le bureau de l'application
  361.  *
  362.  * History:
  363.  * --------
  364.  * 1993: fplanque: Created
  365.  */
  366. void    clear_desktop( void )
  367. {
  368.     /* App prend en charge souris */
  369.     WIND_UPDATE_BEG_MCTRL
  370.     
  371.     form_dial( FMD_START, 0, 0, 0, 0, G_x_mini, G_y_mini, G_w_maxi, G_h_maxi );
  372.     /*    printf("\033Y  F"); */
  373.  
  374.     /* D‚sinstalle le bureau: */
  375.     wind_set( 0, WF_NEWDESK, NULL, 0 );
  376.  
  377.     /* R‚affiche bureau: */
  378.     form_dial( FMD_FINISH, 0, 0, 0, 0, G_x_mini, G_y_mini, G_w_maxi, G_h_maxi );
  379.     /* printf("\033Y  -"); */
  380.  
  381.     /* Effet graphique de fermeture: */
  382.     form_dial( FMD_SHRINK, 0, 0, 0, 0, G_x_mini, G_y_mini, G_w_maxi, G_h_maxi );
  383.  
  384.     /* AES peut reprendre la souris */
  385.     WIND_UPDATE_END_MCTRL
  386. }
  387.  
  388.  
  389. /*
  390.  * place_fnct_icon(-)
  391.  *
  392.  * Purpose:
  393.  * --------
  394.  * Placement des ic“nes de fonction sur le bureau:
  395.  *
  396.  * History:
  397.  * --------
  398.  * fplanque: Created
  399.  */
  400. void    place_fnct_icon( OBJECT *icone )
  401. {
  402.     if ( M_fnct_icons_height + G_icon_h > M_fnct_icons_max )
  403.     {
  404.         M_fnct_icons_border -= G_icon_w;
  405.         M_fnct_icons_height    =    1;
  406.         M_fnct_icons_max        -= G_icon_h;
  407.     }
  408.     icone -> ob_x = M_fnct_icons_border;
  409.     icone -> ob_y = M_fnct_icons_height;
  410.     icone -> ob_spec.iconblk -> ib_char |= M_icon_fcolor;        /* Couleur fond */
  411.     M_fnct_icons_height += G_icon_h;
  412. }
  413.  
  414.  
  415. /*
  416.  * place_data_icon(-)
  417.  *
  418.  * Purpose:
  419.  * --------
  420.  * Placement des ic“nes de données sur le bureau:
  421.  *
  422.  * History:
  423.  * --------
  424.  * fplanque: Created
  425.  */
  426. void    place_data_icon( OBJECT *icone )
  427. {
  428.     if ( M_data_icons_width + G_icon_w > M_data_icons_max )
  429.     {
  430.         M_data_icons_border    -= G_icon_h;
  431.         M_data_icons_width    =    0;
  432.         M_data_icons_max        -= G_icon_w;
  433.     }
  434.     icone -> ob_x = M_data_icons_width;
  435.     icone -> ob_y = M_data_icons_border;
  436.     icone -> ob_spec.iconblk -> ib_char |= M_icon_fcolor;        /* Couleur fond */
  437.     M_data_icons_width += G_icon_w;
  438. }
  439.  
  440.  
  441. /*
  442.  * init_icons(-)
  443.  *
  444.  * Purpose:
  445.  * --------
  446.  * Initialisation des ic“nes:
  447.  *
  448.  * History:
  449.  * --------
  450.  * 1993: fplanque: Created
  451.  */
  452. void    init_icons( void )
  453. {
  454.     ICONBLK     *    exemple = G_desktop_adr[ DSTTRASH ] .ob_spec.iconblk;
  455.     DATAGROUP *    datagroup_ptr;        /* Pointeur sur datagr en cours de registrement */
  456.  
  457.     /* Dessin d'un fant“me d'ic“ne: */
  458.     /*         0----2
  459.                 |    |
  460.                 |    |
  461.                 |    |
  462.           12--14      4---6
  463.           |                |
  464.           10-----------8                */
  465.  
  466.         G_fantome_icone[ 0 ]= exemple -> ib_xicon & 0xFFFE;
  467.         G_fantome_icone[ 1 ]= exemple -> ib_yicon & 0xFFFE;
  468.  
  469.         G_fantome_icone[ 2 ]= exemple -> ib_xicon + exemple -> ib_wicon & 0xFFFE;
  470.         G_fantome_icone[ 3 ]= G_fantome_icone[ 1 ];
  471.  
  472.         G_fantome_icone[ 4 ]= G_fantome_icone[ 2 ];
  473.         G_fantome_icone[ 5 ]= exemple -> ib_ytext & 0xFFFE;
  474.  
  475.         G_fantome_icone[ 6 ]= exemple -> ib_xtext + exemple -> ib_wtext & 0xFFFE;
  476.         G_fantome_icone[ 7 ]= G_fantome_icone[ 5 ];
  477.         
  478.         G_fantome_icone[ 8 ]= G_fantome_icone[ 6 ];
  479.         G_fantome_icone[ 9 ]= exemple -> ib_ytext + exemple -> ib_htext & 0xFFFE;
  480.  
  481.         G_fantome_icone[ 10 ]= exemple -> ib_xtext & 0xFFFE;
  482.         G_fantome_icone[ 11 ]= G_fantome_icone[ 9 ];
  483.  
  484.         G_fantome_icone[ 12 ]= G_fantome_icone[ 10 ];
  485.         G_fantome_icone[ 13 ]= exemple -> ib_ytext & 0xFFFE;
  486.         
  487.         G_fantome_icone[ 14 ]= G_fantome_icone[ 0 ];        
  488.         G_fantome_icone[ 15 ]= G_fantome_icone[ 13 ];
  489.  
  490.         G_fantome_icone[ 16 ]= G_fantome_icone[ 14 ];
  491.         G_fantome_icone[ 17 ]= G_fantome_icone[ 1 ];
  492.         
  493.     /*    for( i=0; i<=5 */
  494.  
  495.     /*
  496.      * Minitel: 
  497.      */
  498.     Icon_CopyIBLKtoICONIMG(    G_desktop_adr[ DSTTERM ] .ob_spec.iconblk, &(G_icon_images .minitel) );
  499.     /*
  500.      * Donn‚es: 
  501.      */
  502.     Icon_CopyIBLKtoICONIMG(    G_desktop_adr[ DSTDATAS ] .ob_spec.iconblk, &(G_icon_images .datas) );
  503.     /*
  504.      * Textes: 
  505.      */
  506.     Icon_CopyIBLKtoICONIMG(    G_desktop_adr[ DSTTEXTS ] .ob_spec.iconblk, &(G_icon_images .texte) );
  507.     /*
  508.      * Images: 
  509.      */
  510.     Icon_CopyIBLKtoICONIMG(    G_desktop_adr[ DSTPICS ] .ob_spec.iconblk, &(G_icon_images .image) );
  511.     /*
  512.      * Ic“nes suppl‚mentaires:
  513.      */    
  514.     #if ACCEPT_SMALLFONTS
  515.         if( G_cell_size_prop == 1 )
  516.         {    /*
  517.              * Moyenne:
  518.              */
  519.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk_med[8],  &(G_icon_images .affichages) );
  520.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk_med[9],  &(G_icon_images .saisies) );
  521.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk_med[10], &(G_icon_images .params) );
  522.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk_med[11], &(G_icon_images .liens) );
  523.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk_med[12], &(G_icon_images .erreurs) );
  524.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk_med[13], &(G_icon_images .motsclef) );
  525.         }
  526.         else
  527.         {    /*
  528.              * Haute:
  529.              */
  530.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk[8],  &(G_icon_images .affichages) );
  531.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk[9],  &(G_icon_images .saisies) );
  532.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk[10], &(G_icon_images .params) );
  533.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk[11], &(G_icon_images .liens) );
  534.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk[12], &(G_icon_images .erreurs) );
  535.             Icon_CopyIBLKtoICONIMG(    &rs_iconblk[13], &(G_icon_images .motsclef) );
  536.         }
  537.     #else
  538.         /*
  539.          * On considŠre qu'opn est en haute:
  540.          */
  541.         Icon_CopyIBLKtoICONIMG(    &rs_iconblk[8],  &(G_icon_images .affichages) );
  542.         Icon_CopyIBLKtoICONIMG(    &rs_iconblk[9],  &(G_icon_images .saisies) );
  543.         Icon_CopyIBLKtoICONIMG(    &rs_iconblk[10], &(G_icon_images .params) );
  544.         Icon_CopyIBLKtoICONIMG(    &rs_iconblk[11], &(G_icon_images .liens) );
  545.         Icon_CopyIBLKtoICONIMG(    &rs_iconblk[12], &(G_icon_images .erreurs) );
  546.         Icon_CopyIBLKtoICONIMG(    &rs_iconblk[13], &(G_icon_images .motsclef) );
  547.     #endif
  548.  
  549.     /******************************************/
  550.     /* Initialisation des groupes de donn‚es: */
  551.     /******************************************/
  552.     /* 
  553.      * Alloue zone m‚moire pour les infos: 
  554.      */
  555.         G_datagroups = MALLOC( sizeof( DATAGROUP ) * NB_DATAGROUPS );
  556.         datagroup_ptr = G_datagroups;        /* Ptr sur 1er datagroup */
  557.         register_datagroup( DSTARBO,  datagroup_ptr++ );    
  558.         register_datagroup( DSTPAGES, datagroup_ptr++ );    
  559.         register_datagroup( DSTDATAS, datagroup_ptr++ );    
  560.         register_datagroup( DSTTEXTS, datagroup_ptr++ );    
  561.         register_datagroup( DSTPICS,  datagroup_ptr++ );    
  562.         /* printf("Nbre de G_datagroups enregistr‚s: %d\n",M_nb_datagroups); */
  563. }
  564.  
  565.  
  566. /*
  567.  * 02.02.95:
  568.  */
  569. void    Icon_CopyIBLKtoICONIMG(
  570.             ICONBLK * pIconBlk,
  571.             ICONIMG * pIconImg )
  572. {            
  573.     pIconImg -> mask         =    pIconBlk -> ib_pmask;
  574.     pIconImg -> data         =    pIconBlk -> ib_pdata;
  575.     pIconImg -> icon_y    =    pIconBlk -> ib_yicon;
  576.     pIconImg -> icon_h    =    pIconBlk -> ib_hicon;
  577.     pIconImg -> char_x    =    pIconBlk -> ib_xchar;
  578.     pIconImg -> char_y    =    pIconBlk -> ib_ychar;
  579. }
  580.  
  581. /*
  582.  * 02.02.95:
  583.  */
  584. void    Icon_CopyICONIMGtoIBLK(
  585.             ICONIMG * pIconImg,
  586.             ICONBLK * pIconBlk )
  587. {            
  588.     pIconBlk -> ib_pmask = pIconImg -> mask;
  589.     pIconBlk -> ib_pdata = pIconImg -> data;
  590.     pIconBlk -> ib_yicon = pIconImg -> icon_y;
  591.     pIconBlk -> ib_hicon = pIconImg -> icon_h;
  592.     pIconBlk -> ib_xchar = pIconImg -> char_x;
  593.     pIconBlk -> ib_ychar = pIconImg -> char_y;
  594. }
  595.  
  596.  
  597. /*
  598.  * register_datagroup(-)
  599.  *
  600.  * Purpose:
  601.  * --------
  602.  * Enregistre un groupe de donn‚es dans la liste
  603.  *
  604.  * History:
  605.  * --------
  606.  * 1993: fplanque: Created
  607.  */
  608. void    register_datagroup( int    icon_no, DATAGROUP *datagroup_ptr )
  609. {
  610.     /*
  611.      * state de l'ic“ne: 
  612.      */
  613.     unsigned int    *icon_state = &(G_desktop_adr[ icon_no ] .ob_state);
  614.     /*
  615.      * state ‚tendus: 
  616.      */
  617.     DATATYPE            ext_state    = (*icon_state) >> 9;
  618.     /*
  619.      * Nom de l'unit‚ de stockage virtuelle: 
  620.      */
  621.     char                *data_device;        
  622.     /* printf("state ‚tendus=%u\n",ext_state); */
  623.  
  624.     /*
  625.      * Fixe certains ParamŠtres Datagroup (Pas tous!): 
  626.      */        
  627.     datagroup_ptr -> icon_no        = icon_no;        /* No datagr [0...] */
  628.     datagroup_ptr -> DataType        = ext_state;    /* Type de donn‚es */
  629.  
  630.     init_vars_datagroup( datagroup_ptr );
  631.  
  632.     /*
  633.      * Fixe le nom de l'unit‚ de stockage virtuelle: 
  634.      */
  635.     switch( ext_state )
  636.     {
  637.         case    DTYP_ARBO:
  638.             datagroup_ptr -> root_dir = NULL;    /* Pas encore de dossier reli‚ */
  639.             data_device = "ARB:";
  640.             break;
  641.             
  642.         case    DTYP_PAGES:
  643.             datagroup_ptr -> root_dir = create_EmptyDataDir( datagroup_ptr, NULL );    /* Cr‚e dossier vide */
  644.             data_device = "ECR:";
  645.             break;
  646.             
  647.         case    DTYP_DATAS:
  648.             datagroup_ptr -> root_dir = create_EmptyDataDir( datagroup_ptr, NULL );    /* Cr‚e dossier vide */
  649.             data_device = "DAT:";
  650.             break;
  651.             
  652.         case    DTYP_TEXTS:
  653.             datagroup_ptr -> root_dir = create_EmptyDataDir( datagroup_ptr, NULL );    /* Cr‚e dossier vide */
  654.             data_device = "TXT:";
  655.             break;
  656.             
  657.         case    DTYP_PICS:
  658.             datagroup_ptr -> root_dir = create_EmptyDataDir( datagroup_ptr, NULL );    /* Cr‚e dossier vide */
  659.             data_device = "IMG:";
  660.             break;
  661.  
  662.         default:
  663.             datagroup_ptr -> root_dir = create_EmptyDataDir( datagroup_ptr, NULL );    /* Cr‚e dossier vide */
  664.             data_device = "xxx:";
  665.  
  666.     }
  667.     strcpy( datagroup_ptr -> data_device, data_device );
  668.  
  669.     /* Nouveaux state ‚tendus = No du datagroup concern‚ [1...]: */
  670.     /* Une ic“ne sans datagroup aura donc pour ext_state: 0 */
  671.     ext_state    = (++M_nb_datagroups) << 9;
  672.     /* Fixe nouveaux state: */
  673.     (*icon_state) &= 0x01FF;        /* Efface ancien ext_state */
  674.     (*icon_state) |= ext_state;    /* Fixe nouveaux.. */
  675. }
  676.  
  677.  
  678.  
  679. /*
  680.  * dgroup_adr_byiconno(-)
  681.  *
  682.  * Purpose:
  683.  * --------
  684.  * Fournit l'adresse d'un groupe de donn‚es
  685.  * en fonction du no de l'ic“ne
  686.  *
  687.  * History:
  688.  * --------
  689.  * 1993: fplanque: Created
  690.  */
  691. DATAGROUP    *dgroup_adr_byiconno( int icon_no )
  692. {
  693.     int    data_no = ( (G_desktop_adr[ icon_no ] .ob_state) >>9) -1;    /* Ext flags de l'ic“ne */
  694.  
  695.     return    &G_datagroups[ data_no ];
  696. }
  697.  
  698.  
  699.  
  700. /*
  701.  * find_datagroup_byType(-)
  702.  *
  703.  * Purpose:
  704.  * --------
  705.  * Fournit l'adresse d'un groupe de donn‚es
  706.  * en fonction du type de donn‚es qu'il contient
  707.  *
  708.  * Algorythm:
  709.  * ----------  
  710.  * V‚rifie tous les DATAGROUPS pour voir si le type existe
  711.  *
  712.  * History:
  713.  * --------
  714.  * 06.07.94: fplanque: Created
  715.  * 11.07.94: Recherche plus fiable du DATAGROUP concern‚
  716.  */
  717. DATAGROUP    *    find_datagroup_byType(         /* Out: Ptr sur datagroup */
  718.                         DATATYPE        DataType )    /* In:  Type DTYP_* */
  719. {
  720.     int    i;
  721.  
  722.     for( i=0; i<NB_DATAGROUPS; i++ )
  723.     {
  724.         if( G_datagroups[ i ] .DataType == DataType )
  725.         {
  726.             return    & G_datagroups[ i ];
  727.         }
  728.     }
  729.  
  730.     return    NULL;
  731. }
  732.